//
//  GDMStatuseListModel.swift
//  SinaWeibo
//
//  Created by mac on 15/12/3.
//  Copyright © 2015年 mac. All rights reserved.
//

import UIKit

import AFNetworking

import SVProgressHUD

import SDWebImage

class GDMStatuseListModel: NSObject {

    //    MARK : 获取微博的信息,要是网路不好的时候这个数据就是有可能获取不到，所以这里要是一个可选的类型,因为这个类型是一个字典数组，这个就是要用一个数组包着
    class func loadData(since_id : Int,max_id : Int , finished : (statuses : [GDMHomeStatusModel]?) -> () ){
        
        //        拿到微博接口的url
        //        https://api.weibo.com/2/statuses/home_timeline.json
        let urlString = "2/statuses/home_timeline.json"
        
        guard let token = GDMAccountViewModel().token else {
            
            SVProgressHUD.showErrorWithStatus("你的网络太差了")
            
            return
        }
    
        var parameters = ["access_token" : token]
    
        if since_id > 0 {
            
            parameters["since_id"] = "\(since_id)"
        }
        
//        进行判断max_id
        if max_id > 0 {
            
//            在这里减一个1在刷新数据的时候，有一条内容就不会呗重复加载了
            parameters["max_id"] = "\(max_id - 1)"
        }
        
    GDMNetworkingTools.sharedTools.requestJSONDict(.GET, urlString: urlString, parameters: parameters) { (result, error) -> () in
        
        if error != nil {
            
            finished(statuses: nil)
            
            return
        }
        
        guard let array = result!["statuses"] as? [[String : AnyObject]] else {
     
            finished(statuses: nil)
            
            print("数据解析有误")
            
            return
        }
        
        var list = [GDMHomeStatusModel]()
     
        for item in array {
          
            let s = GDMHomeStatusModel(dict: item)
            
            list.append(s)
        }

//        finished(statuses: list)
        cacheStatusSingleImage(list, finished: finished)
        
    }
    
    }
    
//    执行回调的方法，实现图片的异步下载图片，并且缓存起来
//    参数第一个要把数组传递进去，根据数组中的内容，进行图片的下载和缓存
//    参数二回调的内容
    class func cacheStatusSingleImage(array : [GDMHomeStatusModel] , finished : (status : [GDMHomeStatusModel]?) -> ()){
        
//        判断数组中是不是有值
        if array.count == 0 {
            
//            如果数组是空的时候也是不能直接return的，因为只要是return了之后，下拉的条就不能回去了，所以给他回调一个空的数组
            finished(status: [])
            
            return
        }
        
//        实例化一个群组
        let group = dispatch_group_create()
        
//        遍历模型，取出里面的每一张图片的地址
        for s in array {
            
            if let urls = s.pictureUrl {
                
                if urls.count != 1 {
                    
                    continue
                }
                
                dispatch_group_enter(group)
//               开始下载图片
                SDWebImageManager.sharedManager().downloadImageWithURL(urls.first, options: [], progress: nil, completed: { (_, _, _, _, _) -> Void in
                    
                    print("单张图片下载完成")
//                    移除组
                    dispatch_group_leave(group)
                    
                })
                
            }
            
        }
        
//        图片下载完成执行回调
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
            
            print("图片加载完成")
            finished(status: array)
        }
        
    }
    
}
